#ifndef PID_H
#define PID_H

#include <stdint.h>

// 初始化PID控制器
void PID_Init(uint8_t motor_id, float kp, float ki, float kd, float output_max, float output_min);

// 设置PID目标值
void PID_SetTarget(uint8_t motor_id, float target);

// PID计算并输出结果
float PID_Calculate(uint8_t motor_id, float actual);

// 使用编码器数据更新所有电机PID控制
void PID_UpdateAllMotors(int16_t motor1_rpm, int16_t motor2_rpm, int16_t motor3_rpm, int16_t motor4_rpm);

// 主PID控制循环函数，使用编码器直接计算并更新
void PID_Control(int16_t *motor1_rpm, int16_t *motor2_rpm, int16_t *motor3_rpm, int16_t *motor4_rpm);

// 初始化所有PID控制器
void PID_ALLinit(void);

// 获取PID参数函数
float PID_GetKp(uint8_t motor_id);
float PID_GetKi(uint8_t motor_id);
float PID_GetKd(uint8_t motor_id);
float PID_GetTarget(uint8_t motor_id);
float PID_GetActual(uint8_t motor_id);
float PID_GetError(uint8_t motor_id);
float PID_GetOutput(uint8_t motor_id);

// 设置PID参数函数
void PID_SetKp(uint8_t motor_id, float kp);
void PID_SetKi(uint8_t motor_id, float ki);
void PID_SetKd(uint8_t motor_id, float kd);

#endif /* PID_H */
